/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package simplexml.utiles;

/**
 *
 * @author Dianita
 */
import java.util.ArrayList;
import java.util.List;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import simplexml.modelo.Atributo;
import simplexml.modelo.Nodo;

public class Archivoxml {

    DocumentBuilder builder;
    DOMImplementation implementation;
    Document document;
    //Element raiz;

//    public Archivoxml(String raiz) {
//        anadir_raiz(raiz);
//    }
    //anadir la raiz al documento xml
//    public void anadir_raiz(String nombre_raiz) {
//        try {
//            this.raiz = this.document.createElement(nombre_raiz);
//        } catch (Exception e) {
//            System.out.println(e);
//        }
//
//    }
    //agregar nodos e ir agregando atributos
    public void agregar_nodo(Nodo nodo) {
        Element elemento = this.document.createElement(nodo.getNombre_nodo());
        if (!nodo.getAtributos().isEmpty()) {
            List<Atributo> listaAtributos = nodo.getAtributos();
            for (int i = 0; i < listaAtributos.size(); i++) {
                elemento.setAttribute(nodo.getAtributos().get(i).getNombreAtributo(), nodo.getAtributos().get(i).getValorAtributo());
            }
        }
        agregar_jerarquiaElementos(elemento, nodo.getNodo_Padre());
    }

    //agregar la version del documento
    public void agregar_version(String version) {
        this.document.setXmlVersion(version); // asignamos la version de nuestro XML
    }
    //agregar elementos anidados
    public void agregar_jerarquiaElementos(Element elemento_padre, Element elemento_hijo) {
        elemento_padre.appendChild(elemento_hijo);
    }

    public void crearXML(String version, String nombre_raiz, List<Nodo> nodos, String nombreArhivo) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

        try {
            builder = factory.newDocumentBuilder();
            implementation = builder.getDOMImplementation();
            document = implementation.createDocument(null, "xml", null);
            Element raiz = document.createElement(nombre_raiz);  // creamos el elemento raiz            
            //anadir_raiz(nombre_raiz);
            //agregar_version(version);
            document.setXmlVersion("1.0"); // asignamos la version de nuestro XML            
//            Element elemento1 = this.document.createElement("hulap");
//            raiz.appendChild(elemento1);
            if(nodos==null){
                Element elemento = this.document.createElement("nulo");
                raiz.appendChild(elemento);                    
            }
            if (!nodos.isEmpty()) {
                for (int i = 0; i < nodos.size(); i++) {
                    System.out.println(nodos.get(i).getNombre_nodo()+" nombre nodo");
                    Element elemento = this.document.createElement(nodos.get(i).getNombre_nodo());
                    
                    List<Atributo> listaAtributos = nodos.get(i).getAtributos();
                    for (int j = 0; j < listaAtributos.size(); j++) {
                        elemento.setAttribute(nodos.get(i).getAtributos().get(j).getNombreAtributo(), nodos.get(i).getAtributos().get(j).getValorAtributo());
                    }
                    raiz.appendChild(elemento);                                       
                }
                document.getDocumentElement().appendChild(raiz);
            }
            //pegamos la raiz al documento
            Source source = new DOMSource(document);
            Result result = new StreamResult(new java.io.File(nombreArhivo + ".xml")); //nombre del archivo
            Result console = new StreamResult(System.out);
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.transform(source, result);
            transformer.transform(source, console);

        } catch (Exception e) {
            System.err.println("Error: " + e);
        }
    }

//    public void crearArchivo() {
//        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//        try {
//            builder = factory.newDocumentBuilder();
//            implementation = builder.getDOMImplementation();
//            document = implementation.createDocument(null, "xml", null);
//            Element raiz = document.createElement("Correos");  // creamos el elemento raiz            
//            Element elemento = document.createElement("Correo"); //creamos un nuevo elemento
//            Text text = document.createTextNode("pepito@tuemail.com"); //Ingresamos la info
//            document.setXmlVersion("1.0"); // asignamos la version de nuestro XML
//            document.getDocumentElement().appendChild(raiz);  //pegamos la raiz al documento
//            raiz.appendChild(elemento); //pegamos el elemento hijo a la raiz            
//            elemento.appendChild(text); //
//            Source source = new DOMSource(document);
//            Result result = new StreamResult(new java.io.File("resultado.xml")); //nombre del archivo
//            Result console = new StreamResult(System.out);
//            Transformer transformer = TransformerFactory.newInstance().newTransformer();
//            transformer.transform(source, result);
//            transformer.transform(source, console);
//
//        } catch (Exception e) {
//            System.err.println("Error: " + e);
//        }
//    }
    public static void main(String[] args) {

        Archivoxml a = new Archivoxml();
//      a.anadir_raiz("diana");
        List<Nodo> nodos = new ArrayList<Nodo>();

        List<Atributo> atrib1 = new ArrayList<Atributo>();

        Atributo atr = new Atributo("nombre", "Diana");
        Atributo atr2 = new Atributo("cedula", "1104662745");
        atrib1.add(atr);
        atrib1.add(atr2);

        Nodo n = new Nodo();
        n.setNombre_nodo("estudiante");
        n.setAtributos(atrib1);
        
        nodos.add(n);
        a.crearXML("1", "diana", nodos, "prueba");

    }
}
